﻿#ifndef __UIFLASH_H__
#define __UIFLASH_H__
#pragma once

// \Utils\Flash11.tlb 为Flash11接口文件，部分方法在低版本不存在，使用需注意
// #import "PROGID:ShockwaveFlash.ShockwaveFlash"  \
//      raw_interfaces_only,       /* Don't add raw_ to method names */ \
//      named_guids,           /* Named guids and declspecs */    \
//      rename("IDispatchEx","IMyDispatchEx")    /* fix conflicting with IDispatchEx ant dispex.h */  
// using namespace ShockwaveFlashObjects;
#include "Utils/FlashEventHandler.h"
#include "Utils/flash11.tlh"

class CActiveXCtrl;

namespace DuiLib
{
    class UILIB_API CFlashUI
        : public CActiveXUI
    //    , public IOleInPlaceSiteWindowless // 透明模式绘图，需要实现这个接口
        , public _IShockwaveFlashEvents
        , public ITranslateAccelerator
    {
        DECLARE_DUICONTROL(CFlashUI)
    public:
        CFlashUI(void);
        ~CFlashUI(void);

        void SetFlashEventHandler(CFlashEventHandler* pHandler);
        virtual bool DoCreateControl();
        IShockwaveFlash* m_pFlash;

    private:
        virtual LPCTSTR GetClass() const;
        virtual LPVOID GetInterface( LPCTSTR pstrName );

        virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount( __RPC__out UINT *pctinfo );
        virtual HRESULT STDMETHODCALLTYPE GetTypeInfo( UINT iTInfo, LCID lcid, __RPC__deref_out_opt ITypeInfo **ppTInfo );
        virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames( __RPC__in REFIID riid, __RPC__in_ecount_full(cNames ) LPOLESTR *rgszNames, UINT cNames, LCID lcid, __RPC__out_ecount_full(cNames) DISPID *rgDispId);
        virtual HRESULT STDMETHODCALLTYPE Invoke( DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr );

        virtual HRESULT STDMETHODCALLTYPE QueryInterface( REFIID riid, void **ppvObject );
        virtual ULONG STDMETHODCALLTYPE AddRef( void );
        virtual ULONG STDMETHODCALLTYPE Release( void );

        HRESULT OnReadyStateChange (long newState);
        HRESULT OnProgress(long percentDone );
        HRESULT FSCommand (_bstr_t command, _bstr_t args);
        HRESULT FlashCall (_bstr_t request );

        virtual void ReleaseControl();
        HRESULT RegisterEventHandler(BOOL inAdvise);

        // ITranslateAccelerator
        // Duilib消息分发给WebBrowser
        virtual LRESULT TranslateAccelerator( MSG *pMsg );

    private:
        LONG m_dwRef;
        DWORD m_dwCookie;
        CFlashEventHandler* m_pFlashEventHandler;
    };
}

#endif // __UIFLASH_H__
